“It is remarkable how much long-term advantage people like us have gotten by trying to be consistently not stupid, instead of trying to be very intelligent.” Charlie Munger
Not being an idiot is more effective than being a genius in most situations #HoskWisdom
The default approach is to find solutions to problems but instead of solutions to problems, invert the problem and stop doing things which make it worse.
Sometimes the best way to solve a problem is to avoid it and don’t waste time and effort on working on the wrong thing or heading in the wrong direction.
Developers
When software engineers start their career they suck, they have little knowledge, few skills, zero experience but lots of enthusiasm. Every task is hard because they don’t know how to do it, they don’t have the skills or experience. Junior developers make mistakes and need help from their senior colleges.
Goal
Improve skills, knowledge and experience
Inverted Goal
Stop making mistakes (and slowing improvement)
The goal of a software engineer is to get better, by doing
- Learn new skills
- Gain knowledge
- Write code
- Make mistakes and learn
- Watch videos
What if we invert the goal, instead of focusing on being good, the junior developer focuses on avoiding mistakes and getting worse.
- Code analyser to catch bad code
- Learn from mistakes and make sure you don’t repeat them
- Get code reviews to catch badly written code
Avoiding mistakes allows new software engineer to pick up momentum and replace bad behaviors with good behaviours. Doing stupid things slows your momentum because you need to undo the wrong action before you can move on to doing the right thing (warning, you don’t always know what the right thing is).
Avoid being stupid and doing stupid things instead of focusing on doing clever things. Experience developers make fewer mistakes because they have learnt to avoid them, this results in steady progress which scrum masters and project managers love.
Improve by not making mistakes
Don’t limit you stuff to just improving but focus on avoiding mistakes #HoskWisdom
The British cycling team lead by Dave Brailsford use this method to improve with marginal gains by looking for lots of small improvements.
How 1% Performance Improvements Led to Olympic Gold
Goal
Help the riders recuperate and get a good nights sleep
Inverted Goal
Stop the riders from having poor nights sleep
Code
Inversion is used in code analyzers to improve the quality of code and teach developers to write better code.
Goal
The goal of code analyzers is to help developers create quality code
Inverted Goal
Stop developers from writing poor quality code
Code analyzer has rules, containing examples of bad code. Developer runs the code analyzer it finds examples of bad code and raises a warning. The developer fixes the problem, swapping poor quality code for better code.
Writing good code is avoiding writing bad code, swap bad habits for good habits and beat the suck.
We can use the approach to projects and the method to speeding up the project is avoiding slowing it down and targeting the bottle necks and processes which take a long time.
Making a project faster is avoiding slowing it down #HoskCodeWisdom
Bug fixing
We use inverted thinking many times as a developer and bug fixing is a good example.
Goal
The goal bug fixing is to find the problem and fix it
Inverted Goal
Confirm what works and narrow the causes of the bug
When bug fixing, forget what you think is causing the bug and prove what works to narrow the search for the problem. Inverting the problem helps you rule out the working functionality.
Football
The goal of football is to win matches but for the teams in the lower half of the premier league they should invert this and make the goal to not lose matches.
Scoring goals is difficult and goal scorers, creative players cost more money and the lower teams cannot afford top strikers on their budgets. If they focused their recruitment and training in not conceding goals, not making mistakes and trying to convert set pieces they have a higher chance of success.
Experienced managers such as Sam Allardyce, Tony Pulis successfully use this tactic by focusing on not losing. Don’t lose the match and hope to win. The opposition will make a mistake, your player will score an amazing goal or you convert a set piece.
If you don’t let a goal in, you can’t lose the match.
This article highlights the difference between professional tennis players
Professionals win points where as amateurs lose them
Summary
Inverting problems helps you view a problems from different perspectives so you create incremental improvements. Inverting the problem is a thinking tool to create innovative solutions and different solutions.Time spent thinking about a problem is time well spent.
Analyse the problem, invert the problem, come up with lots of solutions before picking the best one. Make your plan and focus on execution. You can save time but avoiding mistakes or executing the wrong plan.
Following the wrong plan is heading off in the wrong direction to your destination.
I will end with this quote from Charlie Munger
Invert, always invert: Turn a situation or problem upside down. Look at it backward. What happens if all our plans go wrong? Where don’t we want to go, and how do you get there? Instead of looking for success, make a list of how to fail instead – through sloth, envy, resentment, self-pity, entitlement, all the mental habits of self-defeat. Avoid these qualities and you will succeed. Tell me where I’m going to die, that is, so I don’t go there. – Charlie Munger
Further reading
One thought on “How inverting problems can help you become a better software engineer”